package com.xiaoma.atomic;

import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;

/**
 * @author xiaomacdut
 * @date 2020年2月29日 下午4:05:52
 */
public class Atomic{
    
    private static final int THREADS_CONUT = 20;
    public static AtomicInteger count = new AtomicInteger(0);
    public static AtomicLong atomicLong=new AtomicLong(100);

    
    public static void main(String [] args){

        Thread [] threads = new Thread[THREADS_CONUT];
        for(int i = 0; i < THREADS_CONUT; i++){
            threads[i] = new Thread(new Runnable(){
                
                @Override
                public void run(){
                    
                    for(int i = 0; i < 1000; i++){
                        increase();
                    }
                }
            });
            
            threads[i].start();
        }
        
        while(Thread.activeCount() > 1){
            // 主线程先让出cpu使用权 yield方法和sleep方法一样，在暂停的过程当中，并不会释放锁
            // wait方法让线程进入到block状态，yield让线程进入到runnable状态
            // 因此wait执行后的线程需要被唤醒。而yield方法执行后的线程不需要唤醒，可以直接再次获取CPU时间并执行
            Thread.yield();
        }
        
        System.out.println(count);



    }

    
    public static void increase(){
        count.incrementAndGet();
    }

    
    
}
